今天要來實作滅火的行為,包含了水柱的噴射以及火焰的熄滅,那就繼續看下去吧!
目錄
為火焰添加碰撞器
建立滅火控制器
水柱隨相機移動
噴出水柱
滅火,當水柱碰撞到火焰
火焰添加Box Collider,讓火焰可以與水粒子碰撞。
之前創建的水粒子系統新增script:
public ParticleSystem ps;
public GameObject ARCamera;
隨相機位置移動的程式,放在Update當中,確保隨時噴射水柱時都在鏡頭前方。
void Update()
{
transform.position = new Vector3(ARCamera.transform.position.x, transform.position.y-0.14f, ARCamera.transform.position.z);
transform.rotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x-34.5f, ARCamera.transform.eulerAngles.y, ARCamera.transform.eulerAngles.z));
}
在場景添加控制噴水的Button(UI物件),添加Event Trigger元件,新增:
public void Spout() { ps.Play(true); }
public void Stopspout() { ps.Stop(true); }
之前在水的PS勾選collision,為水粒子掛上碰撞體後,使用OnParticleCollision,檢測是否有碰撞的行為發生。如果這個函式被呼叫了,就代表粒子有碰撞到物件,那就一定是產生出來的火焰,直接將火熄滅關閉。
private void OnParticleCollision(GameObject fire)
{
fire.SetActive(false);
}
(這邊因為確定可能碰撞到的物體只有火焰,所以就比較偷懶沒有使用Layer檢查是否為火焰,但如果是比較複雜的專案,不可以直接預設撞擊到的一定是目標物喔!)
再來只要依照自己遊戲企劃的設定,增加在多少時間內熄滅多少火焰的機制,這個小遊戲就完成囉。
以上就是今天的滅火行為的程式撰寫,那FPS滅火系列就結束囉!下一篇文章會是另外的小遊戲,那就明天見囉~